package com.ming_za.odupdaterserver.api;

import com.ming_za.odupdaterserver.core.controller.web.UpdateAPI;
import com.ming_za.odupdaterserver.core.service.ReturnBusinessPackage;
import com.ming_za.odupdaterserver.core.service.update.ODUpdater;
import com.ming_za.odupdaterserver.core.sqlite.domain.Res;
import com.ming_za.odupdaterserver.core.vo.req.ResAddVo;
import com.ming_za.odupdaterserver.core.vo.req.SetResClientPathVo;
import com.ming_za.odupdaterserver.core.vo.req.SetResLabelVo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;

/**
 * 资源管理接口
 * <p>负责资源管理功能调用</p>
 */
public interface ResourcesManager {

    File getResFold();

    /**
     * 检查资源数据是否存在
     * @param resId 资源id
     * @return 存在返回true，否则返回false
     */
    boolean checkLocalRes(long resId);

    /**
     * 获取res对象
     * @param resId 资源id
     */
    Res getRes(long resId);

    List<Res> getRes(Long[] ids);

    /**
     * 获取资源文件字节数据
     * @param resId 资源id
     * @return 字节数据，如果找不到资源返回null
     */
    FileInputStream getResInputStream(long resId) throws FileNotFoundException;

    /**
     * 使用标签获取相关资源
     * @param label 标签不能为复合标签数据
     * @return 资源列表
     */
    ReturnBusinessPackage<List<Res>> getResIncludeLabel(long label);

    /**
     * 获取默认标签的所有资源
     * @return 资源列表
     */
    List<Res> getDefaultLabelRes();

    /**
     * 添加资源
     * @param res 资源参数
     * @param fileInput 文件输入流
     */
    ReturnBusinessPackage<Long> addRes(ResAddVo res, InputStream fileInput);

    /**
     * 设置资源标签
     */
    void setResLabel(SetResLabelVo[] setResLabelVo);

    /**
     * 设置客户端资源地址
     */
    void setClientPath(SetResClientPathVo[] setResClientPathVos);

    void removeRes(Long[] resIds);

}
